/**
 ***********************************************************************************************************
 * 
 ***********************************************************************************************************
 * @file RBRenderPassShadow.h
 ***********************************************************************************************************/

#ifndef __RBRENDERPASSSHADOW_H__
#define __RBRENDERPASSSHADOW_H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBRenderPassShadow.h)
#endif

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBRenderPass.h"
/***********************************************************************************************************
 * Forward declarations
 ***********************************************************************************************************/
class RBEffect;
struct RBShaderVariable;

/***********************************************************************************************************
 * Classes
 ***********************************************************************************************************/
#if 0

class RBRenderPassShadow : public RBRenderPass
{
public:
    enum ShadowType 
    { 
        SSM = 0,            // Standard R32F Shadow
        HSM,            // Hardware shadow map
        VSM,            // Variance Shadow Map
        ESM             // Exponential Shadow Maps
    };


                    RBRenderPassShadow    (const RBString& strTechniqueName, RBCamera* pShadowCamera, uint32 uiWidth = 1024, uint32 uiHeight = 1024, ShadowType eType = ESM);
                   ~RBRenderPassShadow    ();

    virtual void    PreProcessGeometries  (const RBVisibilityComponentArray& entities, RBGeometryArray& geometries);
    virtual void    PostProcessGeometries (const RBGeometryArray& geometries, RBVisibilityComponentArray& entities);

    ShadowType      GetType               () const;

protected:
    RBEffect*  m_pShadowEffect;
    std::vector<RBEffect*> m_aTechniques;
    RBShaderVariable*  m_pShadowMethod;
    ShadowType      m_eType;
    RBShaderResourceView* m_pTexture;

};

/***********************************************************************************************************/
#endif

#endif // __RBRENDERPASSSHADOW_H__
